miniOS.h #ifndef _KERNEL_H_ #define _KERNEL_H_ #include #include #include #include #include #include #endif miniOS.c #include extern Mini_memory_mange memory_mange; extern Mini_task_mange task_manage; int miniOS_current_index; Mini_free_task TCB; Mini_free_task *TCB_PtrCurrentTask; Mini_free_task *TCB_PtrNextTask; void scheduler(void) { TCB_current_index++; TCB_current_index %= (task_manage.max_task_id + 1); TCB_PtrNextTask = &task_manage.free_task_pool[TCB_current_index]; TCB_PtrCurrentTask = TCB_PtrNextTask; } void swiHandler(void) { printf("System Call %d\n", syscallnum); } void irqHandler(void) { if(ICIP & (1 << 27)) != 0) { OSSR = OSSR_M1; OSMR1 = OSCR + 3686400; scheduler(); } } void OS_timer_init(void) { ICCR = 0x01; ICMR |= (1<< 27); ICLR &=~(1 <<27); OSCR = 0; OSMR1 = OSCR+3686400; OSSR = OSSR_M1; } void OS_timer_start(void) { OIER |= (1<<1); OSSR = OSSR_M1; } |
void irq_enable(void) { _asm_("msr cpsr_c, #0x40 | 0x13"); } void irq_disable(void) { _asm_("msr cpsr_c, #0xc0 | 0x13"); } int scheduler_init(void) { if(task_manage.max_task_id < 0) { return -1; } TCB_PtrCurrentTask = &TCB; TCB_PtrNextTask = &task_manage.free_task_pool[0]; TCB_current_index = -1; return 0; } int scheduler_init(void) { if(task_manage.max_task_id < 0) { return -1; } TCB_PtrCurrentTask = &TCB; TCB_PtrNextTask = &task_manage.free_task_pool[0]; TCB_current_index = -1; return 0; } int main() { int i; miniOS_init(); miniOS_user(); if(scheduler_init < 0) { printf("miniOS Kernel Error!!!\n"); return -1; } for(i=0; i<= task_manage.max_task_id; i++) { printf(TCB : TASK%d - init PC(%p) \t init SP(%p) \n"i+1, task_manage.free_task_poo[i].context_pctask_manage.free_task_poo[i].context_sp); } printf("Function TASK1 : %p\n", usertask1); printf("Function TASK2 : %p\n", usertask2); printf("Function TASK3 : %p\n", usertask3); irq_enable(); while(1) { msleep(1000); } return 0; } |